home *** CD-ROM | disk | FTP | other *** search
/ Power CD-ROM!! 8 / Power CD-ROM 8.iso / os2 / zoc200 / install.fil / SCRIPT / OTHER / COST / KAMPREXX
Encoding:
Text File  |  1994-10-05  |  9.2 KB  |  235 lines

  1. /****************************************************************************/
  2. /*              Gebuehren-Auswertung fuer CALLING.LOG            09.09.94   */
  3. /*                                                                          */
  4. /* Passen Sie folgende Werte/Einstellungen an Ihr System an:                */
  5. /* - ZOC-Protokoll-Datei (default: CALLING.LOG)                             */
  6. /* - den Preis einer Telefoneinheit (z.Z. 0.23 DM)                          */
  7. /* - die Zeitspannen in Sekunden fuer Nahzone, Regionalzone und Weitzone    */
  8. /*   (Normal- und Billigtarife)                                             */
  9. /* - alle Vorwahlnummern Ihres Nahbereiches in 'vorwahl_nahbereich'         */
  10. /*   eintragen                                                              */
  11. /* - alle Vorwahlnummern Ihres Regionalbereiches in                         */
  12. /*   'vorwahl_regionalbereich' eintragen                                    */
  13. /*                                                                          */
  14. /*                                                                          */
  15. /* Es werden folgende Feiertag beruecksichtigt:                             */
  16. /* 01.01.   01.05.   03.10.   25.12.   26.12.                               */
  17. /* Es wird ebenfalls zwischen Wochenenden (Sa./So.) und Werktagen           */
  18. /* unterschieden.                                                           */
  19. /*                                                                          */
  20. /* Greetings/2                             FIDO    : Heiko Kamp@2:245/6803.1*/
  21. /*         Heiko                           Internet: kamp@warp.saar.de      */
  22. /* TYPE FLAMES > NUL                       Voice   : ++49 6831-42294        */
  23. /*                                                                          */
  24. /****************************************************************************/
  25.  
  26. /* --------------  Haupt-Programm  ---------------  */
  27.  
  28. CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  29. CALL SysLoadFuncs
  30.  
  31. CLS
  32. /* Name der Protokoll-Datei   -  normalerweise "CALLING.LOG" */
  33. datei = 'f:\dfue\zocbeta\calling.log'    /* !!!!!!!!! ANPASSEN !!!!!!!!! */
  34.  
  35. /* Kosten einer Einheit in DM */
  36. einheit = 0.23                  /* !!!!!!!!! ANPASSEN !!!!!!!!! */
  37.  
  38. /* Trennzeichen zwischen Vorwahl und Telefonnummer (xxxx-yyyyy) */
  39. trenner = '-'
  40.  
  41. /* CONNECT-Zeit in Sekunden */
  42. connect_time = 20               /* Dauer des Verbindungsaufbaus bis zur */
  43.                                 /* CONNECT-Meldung                      */
  44.  
  45. /* Tarifzonen - Dauer in Sekunden */
  46. nahbereich.1 = 360              /* Normaltarif   */  /* !!!! ANPASSEN !!!! */
  47. nahbereich.2 = 720              /*   Billigtarif */  /* !!!! ANPASSEN !!!! */
  48. regional.1   =  60              /* Normaltarif   */  /* !!!! ANPASSEN !!!! */
  49. regional.2   = 120              /*   Billigtarif */  /* !!!! ANPASSEN !!!! */
  50. weit.1       =  21              /* Normaltarif   */  /* !!!! ANPASSEN !!!! */
  51. weit.2       =  42              /*   Billigtarif */  /* !!!! ANPASSEN !!!! */
  52.  
  53. /* Tarifzonen */
  54. /* Nahbereichs-Nummern */       /* !!!!!!!!! ANPASSEN !!!!!!!!! */
  55. vorwahl_nahbereich      = '06835 06832 06834 06827 06809 06806 06825 06881
  56. 06888 06872 06861 06869 06864 06833 0681 06838 06887 06897 06836 06898 06802
  57. 06874 06837 06831'
  58. n_max = WORDS(vorwahl_nahbereich)
  59.  
  60. /* Regionalbereichs-Nummern */  /* !!!!!!!!! ANPASSEN !!!!!!!!! */
  61. vorwahl_regionalbereich = '06332 06337 06338 06373 06384 06386 06500 06501
  62. 06503 0651 06581 06582 06583 06584 06586 06587 06588 06589 06782 06789 06803
  63. 06804 06805 06821 06824 06826 0684- 0685- 06865 06866 06867 06868 06871 06873
  64. 06875 06876 06893 068
  65. 94
  66. '
  67. r_max = WORDS(vorwahl_regionalbereich)
  68.  
  69. /*************************** ENDE DER ANPASSUNGEN ***************************/
  70. SAY '  Datum     Uhrzeit    Dauer         Vorwahl  Zone     Einheiten'
  71. SAY '                  (ohne CONNECT-Zeit)                  (CONNECT-Zeit
  72. incl.)'
  73. SAY
  74. '---------------------------------------------------------------------------'
  75.  
  76. line = 1                        /* Zeilennummern zuruecksetzen */
  77. einheiten = 0                   /* Einheiten zuruecksetzen */
  78. line = line + 1                 /* Zeilennummer inkrementieren */
  79. zeiel = LINEIN(datei,1,0)       /* Anfangsposition */
  80. zeile = 'empty'
  81.  
  82. DO WHILE (LENGTH(zeile) <> 0)
  83. zeile = LINEIN(datei)                   /* neue Zeile einlesen */
  84. tarif = 1                               /* Tarif mit Normaltarif */
  85.                                         /* initialisieren        */
  86. sekunden_einheit = 0                    /* initialisieren */
  87.  
  88. IF WORD(zeile,3)='C#:' THEN             /* Zeile mit Telefon-Nr. gefunden */
  89. DO
  90.    tag   = SUBSTR(zeile,1,2)            /* Tagesdatum isolieren */
  91.    monat = SUBSTR(zeile,4,2)            /* Monatszahl isolieren */
  92.    jahr  = SUBSTR(zeile,7,4)            /* Jahreszahl isolieren */
  93.    CALL wochentag tag, monat, jahr      /* Wochentag bestimmen */
  94.    w_tag = RESULT                       /* Nr. des Wochentags in w_tag ablegen
  95. */
  96.  
  97.    stunden = SUBSTR(zeile,12,2)         /* Stunden  (Uhrzeit) isolieren */
  98.    minuten = SUBSTR(zeile,15,2)         /* Minuten  (Uhrzeit) isolieren */
  99.    sekunden= SUBSTR(zeile,18,2)         /* Sekunden (Uhrzeit) isolieren */
  100.  
  101.    SELECT
  102.       WHEN  (stunden>17) | (stunden<7)  THEN tarif = 2  /*Billig-Tarif zw. 18
  103. und 7 Uhr */
  104.       WHEN  (w_tag = 0) | (w_tag = 6)   THEN tarif = 2  /*Billig-Tarif an
  105. Wochenenden */
  106.       WHEN  tag = 1 & monat = 1 THEN tarif = 2  /* Billig-Tarif an Feiertagen
  107. */
  108.       WHEN  tag = 1 & monat = 5 THEN tarif = 2  /* Billig-Tarif an Feiertagen
  109. */
  110.       WHEN  tag = 3 & monat =10 THEN tarif = 2  /* Billig-Tarif an Feiertagen
  111. */
  112.       WHEN  tag =25 & monat =12 THEN tarif = 2  /* Billig-Tarif an Feiertagen
  113. */
  114.       WHEN  tag =26 & monat =12 THEN tarif = 2  /* Billig-Tarif an Feiertagen
  115. */
  116.    OTHERWISE
  117.       tarif = 1
  118.    END                                  /* SELECT */
  119.  
  120.    vorwahlpos = LASTPOS(trenner,zeile) - 26     /* Vorwahlnummer lokalisieren
  121. */
  122.    IF vorwahlpos <=0 THEN vorwahlpos = 0        /* Keine Vorwahl eingeben */
  123.    vorwahl = SUBSTR(zeile,26,vorwahlpos)        /* Vorwahlnummer isolieren */
  124.    speicher = vorwahl
  125.  
  126.    IF vorwahlpos = 0 THEN
  127.    DO
  128.       sekunden_einheit = nahbereich.tarif
  129.       vorwahl = Nahbereich
  130.    END
  131.  
  132.    DO i=1 TO n_max
  133.       IF vorwahlpos = 0 THEN LEAVE
  134.       vorwahl_x = WORD(vorwahl_nahbereich, i)            /* jeweiles ein
  135. Element aus der Liste holen */
  136.       DO j=1 TO LENGTH(vorwahl_x)
  137.          IF SUBSTR(vorwahl_x,j,1) = '-' THEN             /* Element auf Joker
  138. '-' pruefen */
  139.          DO
  140.             vorwahl_x = SUBSTR(vorwahl_x,1,LENGTH(vorwahl_x)-1)  /* Wenn Joker
  141. letztes Zeichen (Joker) loeschen */
  142.             vorwahl   = SUBSTR(vorwahl,1,LENGTH(vorwahl)-1)
  143.          END
  144.          IF (vorwahl = vorwahl_x) then
  145.          DO
  146.             sekunden_einheit = nahbereich.tarif
  147.             zone = 'Nah '
  148.          END
  149.       END j
  150.       vorwahl = speicher
  151.    END i
  152.  
  153.  
  154.    DO i=1 TO r_max
  155.       IF vorwahlpos = 0 THEN LEAVE
  156.       vorwahl_x = WORD(vorwahl_regionalbereich, i)       /* jeweiles ein
  157. Element aus der Liste holen */
  158.       DO j=1 TO LENGTH(vorwahl_x)
  159.          IF SUBSTR(vorwahl_x,j,1) = '-' THEN             /* Element auf Joker
  160. '-' pruefen */
  161.          DO
  162.             vorwahl_x = SUBSTR(vorwahl_x,1,LENGTH(vorwahl_x)-1)    /* Letzes
  163. Zeiche (Joker) loeschen */
  164.             vorwahl   = SUBSTR(vorwahl,1,LENGTH(vorwahl)-1)
  165.          END
  166.          IF (vorwahl = vorwahl_x) then
  167.          DO
  168.             sekunden_einheit = regional.tarif
  169.             zone = 'Reg.'
  170.          END
  171.       END j
  172.       vorwahl = speicher
  173.    END i
  174.  
  175.    IF sekunden_einheit = 0 then
  176.    DO
  177.       sekunden_einheit = weit.tarif
  178.       zone = 'Weit'
  179.    END
  180.  
  181.    DO WHILE WORD(zeile,3) <> 'C-:'
  182.       line = line + 1
  183.       zeile = LINEIN(datei)
  184.    END
  185.  
  186.    dauer_stunden = SUBSTR(zeile,26,2)
  187.    dauer_minuten = SUBSTR(zeile,29,2)
  188.    dauer_sekunden = SUBSTR(zeile,32,2)
  189.    dauer_gesamt = (dauer_stunden * 3600) + (dauer_minuten * 60) +
  190. dauer_sekunden + connect_time
  191.  
  192.    einheiten = einheiten + (dauer_gesamt % sekunden_einheit) + 1
  193.  
  194.    SAY tag'.'monat'.'jahr'  'stunden':'minuten':'sekunden' 
  195. 'dauer_stunden':'dauer_minuten':'dauer_sekunden'  'RIGHT(vorwahl,12)'  'zone' 
  196. 'RIGHT((dauer_gesamt % sekunden_einheit) + 1,10)
  197.    END                                          /* DO WHILE */
  198. END                                             /* DO WHILE */
  199.  
  200. SAY
  201. '---------------------------------------------------------------------------'
  202. SAY '                                        Einheiten :' RIGHT(einheiten,10)
  203. SAY 'Gesamte Kosten : 'einheiten * einheit 'DM'
  204. SAY
  205.  
  206. EXIT
  207.  
  208.  
  209.  
  210.  
  211. wochentag:PROCEDURE EXPOSE tag monat jahr
  212. /*              wochentag               */
  213. /*   a // b = a div b      /   x % y = x mod y    */
  214.  
  215. t = tag         /* Werte sichern */
  216. m = monat
  217. j = jahr
  218. if monat > 2 THEN monat = monat - 2
  219. else
  220. do
  221.    monat = monat + 10
  222.    jahr = jahr - 1
  223. end
  224.    jahrhundert = (jahr%10)
  225.    jahr = (jahr//100)
  226.    wo_tag = (jahr%4)+(jahrhundert%4)+((13*monat-1)%5)+tag+jahr-(2*jahrhundert)
  227.    wo_tag = (wo_tag//7)
  228. IF wo_tag < 0 THEN wo_tag = wo_tag + 7
  229.  
  230. tag = t         /* alte Werte wieder herstellen */
  231. monat = m
  232. jahr = j
  233. RETURN wo_tag
  234.  
  235.